\section{Globale Architectuur}
\label{sec:architectuur}
%TODO Sander

Figuur \ref{fig:architectuur} geeft een vereenvoudigd EER-diagramma weer
van onze database in de backend.  Deze structuur bouwt verder op de gegeven
backend\footnote{http://hcifetcher.appspot.com}.  Primaire sleutels zijn in het
diagramma weggelaten,  deze zijn bij elke entiteit aanwezig in de vorm van een
\cc{id}.  Elke entiteit is ook voorzien van een datestamp.  Omdat deze minder relevant zijn,  zijn deze ook weggelaten.


Een \cc{Question} object hoort bij één \cc{Course} en één \cc{Student}. Uiteraard kan een \cc{Student} meerdere vragen stellen.  Bij een \cc{Question} kunnen nul of meerdere \cc{Answers} horen.  
Een \cc{Answer} kan punten ontvangen wanneer wordt aangegeven dat dit een nuttig
antwoord is. 

Tussen \cc{Student} en \cc{Course} staat een meer-tot-meer relatie,  \cc{Enrollment}.  Hierbij
hoort een variabele \cc{score} die de som van alle punten van een student,
verworven via dat vak,  voorsteld.  Op deze manier is het gemakkelijk een
leaderboard per vak te genereren.  Initieel wilden we een student ook door middel van \cc{Achievements} punten laten vergaren.  \cc{Achievements}  zouden losstaan van vakken en rechtstreeks bij de \cc{Student} zijn \cc{score} worden opgeteld.  Door tijdsgebrek hebben we deze functionaliteit niet kunnen implementeren.

Ten slotte kan een student opgeven wat hij nog moet doen in de vorm van \cc{Todos}.  De \cc{Todo}-lijst is dan een samenstelling van al \cc{Todos} van de
\cc{Student}.  

Het pushen naar de datastore wordt verricht via \cc{httpservlets}.  Alle parameters worden in een url meegegeven,  de \cc{doPost()}-methode van de desbetreffende servlet zal alle parameters uit de url filteren en een nieuwe tupel in de datastore genereren.  Het opvragen van data uit de datastore gebeurd ook via een url.  Met de url wordt aangegeven welke tabel in de datastore geraadpleegd moet worden.  Tevens kunnen extra parameters met de url worden meegegeven om specifieker te \emph{queryen}.  Zo kan je bijvoorbeeld alle \cc{Questions} opvragen met een specifieke studentid\footnote{\url{http://localhost:8888/api/entries/question?studentid=Student(309)}}.  Een \cc{size} en \cc{offset} attribuut als parameter kunnen respectievelijk de grootte en het startpunt van de zoekactie bepalen.  De resultaten van een zoekactie worden in JSON formaat teruggegeven.

\begin{figure}
\centering
\includegraphics[angle=90,scale=0.75]{img/datastoreStructure.pdf}
\caption{EER-diagramma van datastore uit GAE}
\label{fig:architectuur}
\end{figure}